package vista;

import modelo.Planificacion;

import org.joda.time.LocalDate;
import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.aop.windows.TransactionalDialog;
import org.uqbar.arena.bindings.NotNullObservable;
import org.uqbar.arena.layout.ColumnLayout;
import org.uqbar.arena.layout.VerticalLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.TextBox;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.SimpleWindow;
import org.uqbar.arena.windows.WindowOwner;

import applicationModels.ListadoPlanificaciones;

public class ListadoPlanificacionesWindow extends TransactionalDialog<ListadoPlanificaciones> {

	private static final long serialVersionUID = 1L;

	public ListadoPlanificacionesWindow(WindowOwner parent) {
		super(parent, new ListadoPlanificaciones());
		this.setTitle("Planificaciones");
	}

	protected void createMainTemplate(Panel mainPanel) {
		mainPanel.setLayout(new VerticalLayout());
		super.createMainTemplate(mainPanel);
		this.createPlanificacionesGrid(mainPanel);
		this.createPlanificacionesActions(mainPanel);
	}

	@Override
	protected void createFormPanel(Panel mainPanel) {
		Panel formPanel=new Panel(mainPanel);
		formPanel.setLayout(new ColumnLayout(2));
				
		new Button(formPanel)
			.setCaption("Crear planificacion para fecha:")
			.onClick(new MessageSend(this, "crearPlanificacion"));
		
		new TextBox(formPanel)
			.setWidth(100)
			.bindValueToProperty("fechaCrear")
			.setTransformer(new FechaToStringAdapter());
	}
	
	private void createPlanificacionesActions(Panel mainPanel) {
		Panel gridPanel=new Panel(mainPanel);
		gridPanel.setLayout(new VerticalLayout());
			
		Button verHorarios=new Button(gridPanel);
		verHorarios.setCaption("Ver horarios");
		verHorarios.onClick(new MessageSend(this, "verHorarios"));
		
		Button planificar = new Button(gridPanel);
		planificar
		.setCaption("Planificar")
		.onClick(new MessageSend(this, "planificar"));
		
		NotNullObservable horarios=new NotNullObservable("planificacionSeleccionada");
		verHorarios.bindEnabled(horarios);
		planificar.bindEnabled(horarios);
	}
	
	private void createPlanificacionesGrid(Panel mainPanel){
		Panel planificacionesGrid=new Panel(mainPanel);
		
		Table<Planificacion> tablaPlanificaciones=new Table<Planificacion>(planificacionesGrid,Planificacion.class);
		tablaPlanificaciones.setWidth(400);
		tablaPlanificaciones.setHeigth(200);
		tablaPlanificaciones.bindItemsToProperty("planificaciones");
		tablaPlanificaciones.bindValueToProperty("planificacionSeleccionada");
		
		new Column<Planificacion>(tablaPlanificaciones).setTitle("Fecha")
			.setFixedSize(100).bindContentsToTransformer(new FechaPlanificacionToStringTransformer());
	
		
		new Column<Planificacion>(tablaPlanificaciones).setTitle("Estado")
			.setFixedSize(100).bindContentsToProperty("estado");
	}
	
	public void verHorarios(){
		new HorariosWindow(this, this.getModelObject().getPlanificacionSeleccionada()).open();
	}
	
	private void openPlanificador(CrearPlanificacionWindow crearPlanificacionWindow){
		crearPlanificacionWindow.onAccept(new MessageSend(this.getModelObject(), "refreshPlanificaciones"));
		crearPlanificacionWindow.onAccept(new MessageSend(this.getModelObject(), "refrescarFecha"));
		crearPlanificacionWindow.open();
	}
	
	public void crearPlanificacion(){
        CrearPlanificacionWindow crearPlanificacionWindow = new CrearPlanificacionWindow(this, this.getModelObject().getFechaCrear());
		this.openPlanificador(crearPlanificacionWindow);
	}
	
	public void planificar(){
		CrearPlanificacionWindow crearPlanificacionWindow = new CrearPlanificacionWindow(this, this.getModelObject().getPlanificacionSeleccionada());
		this.openPlanificador(crearPlanificacionWindow);
	}

	@Override
	protected void addActions(Panel actionsPanel) {
	}

}
